home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / utils / adt / tid.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  2.6 KB  |  105 lines

  1. /* ----------------------------------------------------------------
  2.  *   FILE
  3.  *     tid.c
  4.  *
  5.  *   DESCRIPTION
  6.  *    Functions for the built-in type tuple id
  7.  *
  8.  *   NOTES
  9.  *    input routine largely stolen from boxin().
  10.  *
  11.  *   IDENTIFICATION
  12.  *    $Header: /private/postgres/src/utils/adt/RCS/tid.c,v 1.3 1991/05/01 02:51:34 cimarron Exp $
  13.  * ----------------------------------------------------------------
  14.  */
  15.  
  16. #include "tmp/postgres.h"
  17.  
  18. RcsId("$Header: /private/postgres/src/utils/adt/RCS/tid.c,v 1.3 1991/05/01 02:51:34 cimarron Exp $");
  19.  
  20. #include "storage/block.h"
  21. #include "storage/off.h"
  22. #include "storage/page.h"
  23. #include "storage/part.h"
  24. #include "storage/itemptr.h"
  25. #include "storage/bufpage.h"
  26.  
  27. #include "utils/palloc.h"
  28.  
  29. #define LDELIM        '('
  30. #define RDELIM        ')'
  31. #define    DELIM        ','
  32. #define NTIDARGS    3
  33.  
  34. /* ----------------------------------------------------------------
  35.  *    tidin
  36.  * ----------------------------------------------------------------
  37.  */
  38. ItemPointer
  39. tidin(str)
  40.     char *str;
  41. {
  42.     char        *p, *coord[NTIDARGS];
  43.     int            i;
  44.     ItemPointer        result;
  45.     
  46.     BlockNumber      blockNumber;
  47.     PageNumber       pageNumber;
  48.     OffsetNumber    offsetNumber;
  49.     PositionId         positionId;
  50.     
  51.     if (str == NULL)
  52.     return NULL;
  53.  
  54.     for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++)
  55.     if (*p == DELIM || (*p == LDELIM && !i))
  56.         coord[i++] = p + 1;
  57.     
  58.     if (i < NTIDARGS - 1)
  59.     return NULL;
  60.     
  61.     blockNumber =    (BlockNumber)     atoi(coord[0]);
  62.     pageNumber =     (PageNumber)    atoi(coord[1]);
  63.     offsetNumber =     (OffsetNumber)    atoi(coord[2]);
  64.     
  65.     result = (ItemPointer) palloc(sizeof(ItemPointerData));
  66.  
  67.     ItemPointerSet(result, SinglePagePartition,
  68.            blockNumber, pageNumber, offsetNumber);
  69.  
  70.     return result;
  71. }
  72.  
  73. /* ----------------------------------------------------------------
  74.  *    tidout
  75.  * ----------------------------------------------------------------
  76.  */
  77. char *
  78. tidout(itemPtr)
  79.     ItemPointer itemPtr;
  80. {
  81.     BlockNumber      blockNumber;
  82.     PageNumber       pageNumber;
  83.     OffsetNumber    offsetNumber;
  84.     PositionId         positionId;
  85.     BlockId         blockId;
  86.     PagePartition    partition;
  87.     char        buf[32];
  88.     char        *str;
  89.     
  90.     blockId =     &itemPtr->blockData;
  91.     positionId = &itemPtr->positionData;
  92.     partition =  SinglePagePartition;
  93.  
  94.     blockNumber =  BlockIdGetBlockNumber(blockId);
  95.     pageNumber =   PositionIdGetPageNumber(positionId, partition);
  96.     offsetNumber = PositionIdGetOffsetNumber(positionId, partition);
  97.     
  98.     sprintf(buf, "(%d,%d,%d)", blockNumber, pageNumber, offsetNumber);
  99.  
  100.     str = (char *) palloc(strlen(buf)+1);
  101.     strcpy(str, buf);
  102.  
  103.     return str;
  104. }
  105.